<html><body>
这个意图改变了一个库方法契约。

方法约定的语法如下：
<pre><code>
 contract ::= (clause ';')* clause
 clause ::= args '->' effect
 args ::= ((arg ',')* arg )?
 arg ::= value-constraint
 value-constraint ::= '_' | 'null' | '!null' | 'false' | 'true'
 effect ::= value-constraint | 'fail' | 'new' | 'this' | 'param' number
 number ::= [1-9] [0-9]*
</code></pre>

约束意味着：<br/>
<ul>
  <li> <code>_</code>: 任意值
  <li> <code>null</code>：null 值
  <li> <code>null!</code>：静态证明为非 null 的值
  <li> <code>true</code>：布尔值 true
  <li> <code>false</code>：布尔值 false
  <li> <code>fail</code>：如果实参满足实参约束，该方法将抛出异常
  <li> <code>new</code>：每次执行该方法时，它都会返回一个新的非 null 对象，该对象与方法执行前存在于堆中的其他对象不同。 如果方法是纯方法，则新对象不会存储在字段或数组中，如果不使用方法的返回值，则新对象将丢失。
  <li> <code>this</code>：该方法返回非 null this 引用
  <li> <code>param1 (param2, param3, etc.)</code>：该方法返回其第一个（第二个、第三个等）实参
</ul>
示例：<br/>
<ul>
  <li> <code>@Contract("_, null -> null")</code>：如果方法的第二个实参为 null，它将返回 null。
  <li> <code>@Contract("_, null -> null; _, !null -> !null")</code> - 如果方法的第二个实参为 null，它将返回 null，否则返回非 null。
  <li> <code>@Contract("true -> fail")</code> - 一个典型的 <code>assertFalse</code> 方法，如果 <code>true</code> 被传递给它，它将抛出异常。
</ul>
</body></html>
